/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.cobranza.mbean;

import com.brain.cobranza.dto.CampoDto;
import com.brain.cobranza.dto.ClienteDto;
import com.brain.cobranza.dto.ComunicacionDto;
import com.brain.cobranza.dto.DeudaClienteDto;
import com.brain.cobranza.dto.EmpresaClienteDto;
import com.brain.cobranza.dto.EmpresaCobranzaDto;
import com.brain.cobranza.dto.PagoDto;
import com.brain.cobranza.dto.ProductoEmpresaDto;
import com.brain.cobranza.manager.ClienteManager;
import com.brain.cobranza.manager.ComunicacionManager;
import com.brain.cobranza.manager.DeudaClienteManager;
import com.brain.cobranza.manager.EmpresaClienteManager;
import com.brain.cobranza.manager.EmpresaCobranzaManager;
import com.brain.cobranza.manager.PagoManager;
import com.brain.cobranza.manager.ProductoEmpresaManager;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.view.mbean.*;

import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.manager.RecursosManager;
import com.brain.segu.dto.UsuarioDto;
import com.brain.segu.manager.UsuarioManager;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import javax.annotation.Resource;
import javax.faces.component.UIData;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("cobranzaMBean")
@Scope("session")
public class CobranzaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(CobranzaMBean.class);
    @Resource
    private EmpresaClienteManager manager;
    @Resource
    private EmpresaCobranzaManager empCobranzaManager;
    @Resource
    private ProductoEmpresaManager prodEmpresaManager;
    @Resource
    private DeudaClienteManager deudaClienteManager;
    @Resource
    private ComunicacionManager comunicacionManager;
    @Resource
    private ClienteManager clienteManager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private RecursosManager recursosManager;
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    @Resource
    private PagoManager pagoManager;
    private List<EmpresaClienteDto> lista;
    private CampoDto dto;
    private EmpresaClienteDto dtoFiltro;
    private String keyEntidad = "key.entidad.cobranza";
    private List<ParametroDto> listaEstadoDeuda;
    private List<ParametroDto> siEstadoDeuda;
    private List<DeudaClienteDto> listaDeta;
    private EmpresaClienteDto detaDto;
    private DeudaClienteDto detaDeudaDto;
    private EmpresaClienteDto dtoPopup;
    private ComunicacionDto comunicacionDto;
    private List<ParametroDto> listaParentezco;
    private List<ParametroDto> listaEfecto;
    private String telComunicacion;
    public boolean mostrarFrmAccion;
    private ComunicacionDto dtoComunica;
    private List<ComunicacionDto> listaComunicacion;
    private List<PagoDto> listaPagos;
    public Integer rowKey;
    private UIData gestionCobranzaDatatable;
 
    public CobranzaMBean() {
        this.dtoFiltro = new EmpresaClienteDto();
        this.mostrarFrmAccion = Boolean.FALSE;
    }

    public String iniciar() {
        this.lista = null;
        this.listaComunicacion = null;
        this.dto = null;
        this.mostrarFrmAccion = Boolean.FALSE;
        this.comunicacionDto = new ComunicacionDto();
        this.dtoComunica = new ComunicacionDto();
        this.dtoFiltro = new EmpresaClienteDto();
        this.dtoFiltro.setClienteDto(new ClienteDto());
        this.dtoFiltro.getClienteDto().setNumeroDocumento("");
        this.dtoFiltro.setNombresApellidos("");
        this.dtoFiltro.setEstadoDeudaDto(new ParametroDto());
        this.dtoPopup = new EmpresaClienteDto();
        this.detaDeudaDto = new DeudaClienteDto();
        this.listaPagos = new ArrayList<PagoDto>();
        if (sessionMBean.getSessionUsuarioDto().getRolDto().getDescripcion().equals("GESTOR")) {
            this.dtoFiltro.setGestorDto(sessionMBean.getSessionUsuarioDto());
        }
        return manager.getUrlLista();
    }

    public void verPago() throws DAOException {
        //   rowKey = gestionCobranzaDatatable.getRowIndex();
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        //  listaPagos = pagoManager.obtenerPorDeuda(lista.get(rowKey).getIdDeudaCliente());
    }

    public void verGestion() {
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        this.mostrarFrmAccion = false;
        this.comunicacionDto = new ComunicacionDto();
        this.listaComunicacion = new ArrayList<ComunicacionDto>();
        try {
            rowKey = gestionCobranzaDatatable.getRowIndex();
            detaDeudaDto = deudaClienteManager.obtenerPorId(lista.get(rowKey).getIdDeudaCliente());
        } catch (DAOException ex) {
            logger.error("Dao Exception" + ex);
        }
    }

    public void buscar() {
        try {
            this.lista = this.manager.obtener(this.dtoFiltro);
            sessionMBean.setAccion(applicationMBean.getEditar());
            sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
            if (this.lista.size() > 0) {
                verificarDetalle();
                if (sessionMBean.getSessionUsuarioDto().getRolDto().getDescripcion().equals("GESTOR")) {
                    this.lista = this.manager.acomodarLista(this.lista, dtoFiltro.getGestorDto().getId());
                } else {
                    this.lista = this.manager.acomodarLista(this.lista);
                }
            }
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }

    private void verificarDetalle() {
        if (this.lista != null) {
            for (EmpresaClienteDto x : this.lista) {
                if ((this.dtoFiltro.getProductoEmpresaDto() != null && !this.dtoFiltro.getProductoEmpresaDto().getId().equals(0L)) || (this.dtoFiltro.getEstadoDeudaDto() != null && !this.dtoFiltro.getEstadoDeudaDto().getId().equals(0L) && !this.dtoFiltro.getEstadoDeudaDto().getDescripcion().equals("*")) && (this.dtoFiltro.getGestorDto() != null && !this.dtoFiltro.getGestorDto().getId().equals(0L))) {
                    List<DeudaClienteDto> l = new ArrayList<DeudaClienteDto>();
                    if (x.getListaDetalle() != null) {
                        for (DeudaClienteDto y : x.getListaDetalle()) {
                            if ((this.dtoFiltro.getProductoEmpresaDto() != null && !this.dtoFiltro.getProductoEmpresaDto().getId().equals(0L)) && (this.dtoFiltro.getEstadoDeudaDto() != null && !this.dtoFiltro.getEstadoDeudaDto().getId().equals(0L) && !this.dtoFiltro.getEstadoDeudaDto().getDescripcion().equals("*")) && (this.dtoFiltro.getGestorDto().getId().equals(y.getGestorDto().getId()))) {
                                if (this.dtoFiltro.getProductoEmpresaDto().getId().equals(y.getProductoEmpresaDto().getId()) && this.dtoFiltro.getEstadoDeudaDto().getId().equals(y.getEstado().getId())) {
                                    l.add(y);
                                }
                            } else if (this.dtoFiltro.getProductoEmpresaDto() != null && !this.dtoFiltro.getProductoEmpresaDto().getId().equals(0L)) {
                                if (this.dtoFiltro.getProductoEmpresaDto().getId().equals(y.getProductoEmpresaDto().getId())) {
                                    l.add(y);
                                }
                            } else if (this.dtoFiltro.getEstadoDeudaDto() != null && this.dtoFiltro.getEstadoDeudaDto().getId() != null && !this.dtoFiltro.getEstadoDeudaDto().getId().equals(0L) && (this.dtoFiltro.getGestorDto().getId().equals(y.getGestorDto().getId()))) {
                                if (this.dtoFiltro.getEstadoDeudaDto().getId().equals(y.getEstado().getId())) {
                                    l.add(y);
                                }
                            } else if (this.dtoFiltro.getGestorDto() != null && !this.dtoFiltro.getGestorDto().getId().equals(0L)) {
                                if (this.dtoFiltro.getGestorDto().getId().equals(y.getGestorDto().getId())) {
                                    l.add(y);
                                }
                            }
                        }
                        x.setListaDetalle(l);
                    }
                }
            }
        }
    }

    public String verBitacora() {

        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public String retroceder() {
        return manager.getUrlLista();
    }

    public List<ProductoEmpresaDto> autoCompletarProducto(String query) {
        ProductoEmpresaManager prodEmpresa = (ProductoEmpresaManager) WebServletContextListener.getApplicationContext().getBean("productoEmpresaManager");
        List<ProductoEmpresaDto> results = null;
        try {
            results = prodEmpresa.autoCompletarProducto(query);
        } catch (DAOException e) {
            logger.error(e.getMessage());
            results = new ArrayList<ProductoEmpresaDto>();
        }

        return results;
    }

    public void guardarCliente() {
        try {
            sessionMBean.setAccion(applicationMBean.getEditar());
            this.deudaClienteManager.editar(detaDeudaDto);
            this.clienteManager.guardar(this.dtoPopup.getClienteDto());
        } catch (Exception e) {
        }
    }

    public void nuevaAccion() throws DAOException {
        sessionMBean.setAccionDetalle(applicationMBean.getNuevo());
        this.mostrarFrmAccion = true;
        this.comunicacionDto = new ComunicacionDto();
        this.comunicacionDto.setTelefono(this.telComunicacion);
        this.comunicacionDto.setEfectoDto(recursosManager.obtenerParametroPorID(809L));
        this.dtoPopup.setIsDisplayed(false);

    }

    public void cancelar() {
        this.mostrarFrmAccion = false;
        this.comunicacionDto = new ComunicacionDto();
        refreshComunicacion();
        this.dtoPopup.setIsDisplayed(true);

    }

    public void refreshComunicacion() {
        try {
            listaComunicacion = comunicacionManager.obtener(dtoPopup.getIdDeudaCliente());
        } catch (DAOException ex) {
            java.util.logging.Logger.getLogger(CobranzaMBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void guardarComunicacion() {
        try {
            this.comunicacionDto.setDeudaClienteDto(this.deudaClienteManager.obtenerPorId(this.dtoPopup.getIdDeudaCliente()));
            this.comunicacionDto.setEstado(Boolean.TRUE);
            this.comunicacionManager.guardar(this.comunicacionDto);
            this.mostrarFrmAccion = false;
            this.dtoPopup.setIsDisplayed(true);
            refreshComunicacion();
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    public void eliminarAccion() {
        try {
            for (int i = 0; i < listaComunicacion.size(); i++) {
                if (dtoComunica.getId().equals(listaComunicacion.get(i).getId())) {
                    listaComunicacion.get(i).setEstado(Boolean.FALSE);
                    this.comunicacionManager.editar(listaComunicacion.get(i));
                }
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        refreshComunicacion();
    }

    public void editarAccion() {
        sessionMBean.setAccionDetalle(applicationMBean.getEditar());
    }
    
    public void actualizarCampos(){
        System.out.println(comunicacionDto.getEfectoDto());
    }

    public void guardarAccion() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.comunicacionManager.guardar(this.dtoComunica) != null) {
           //     buscar();
            } else {
                resultado = false;
            }
        } catch (Exception e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e.getMessage());
        }
        context.addCallbackParam("CallbackParam", resultado);
    }

    public List<UsuarioDto> autoCompletarUsuario(String query) {
        UsuarioManager usuarioManager = (UsuarioManager) WebServletContextListener.getApplicationContext().getBean("usuarioManager");
        List<UsuarioDto> results = null;
        try {
            results = usuarioManager.autoCompletarUsuario(query);
        } catch (DAOException e) {
            logger.error(e);
            results = new ArrayList<UsuarioDto>();
        }

        return results;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        CobranzaMBean.logger = logger;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<EmpresaClienteDto> getLista() {
        return lista;
    }

    public void setLista(List<EmpresaClienteDto> lista) {
        this.lista = lista;
    }

    public CampoDto getDto() {
        return dto;
    }

    public void setDto(CampoDto dto) {
        this.dto = dto;
    }

    public EmpresaClienteDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(EmpresaClienteDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public List<ParametroDto> getSiEstadoDeuda() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        this.siEstadoDeuda = parametroManager.obtenerParametrosActivosPorCatalogoSistema(415L);
        return siEstadoDeuda;
    }

    public void setSiEstadoDeuda(List<ParametroDto> siEstadoDeuda) {
        this.siEstadoDeuda = siEstadoDeuda;
    }

    public List<ParametroDto> getListaEstadoDeuda() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        this.listaEstadoDeuda = parametroManager.obtenerParametrosActivosPorCatalogoSistema(415L);
        return this.listaEstadoDeuda;
    }

    public void setListaEstadoDeuda(List<ParametroDto> listaEstadoDeuda) {
        this.listaEstadoDeuda = listaEstadoDeuda;
    }

    public List<DeudaClienteDto> getListaDeta() {
        this.listaDeta = this.detaDto.getListaDetalle();
        return this.listaDeta;
    }

    public void setListaDeta(List<DeudaClienteDto> listaDeta) {
        this.listaDeta = listaDeta;
    }

    public EmpresaClienteDto getDetaDto() {
        return detaDto;
    }

    public void setDetaDto(EmpresaClienteDto detaDto) {
        this.detaDto = detaDto;
    }

    public DeudaClienteDto getDetaDeudaDto() {
        return detaDeudaDto;
    }

    public void setDetaDeudaDto(DeudaClienteDto detaDeudaDto) {
        this.detaDeudaDto = detaDeudaDto;
    }

    public EmpresaClienteDto getDtoPopup() {
        return dtoPopup;
    }

    public void setDtoPopup(EmpresaClienteDto dtoPopup) {
        this.dtoPopup = dtoPopup;
    }

    public List<ParametroDto> getListaParentezco() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        this.listaParentezco = parametroManager.obtenerParametrosActivosPorCatalogoSistema2(416L);
        return this.listaParentezco;
    }

    public void setListaParentezco(List<ParametroDto> listaParentezco) {
        this.listaParentezco = listaParentezco;
    }

    public List<ParametroDto> getListaEfecto() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        this.listaEfecto = parametroManager.obtenerParametrosActivosPorCatalogoSistema(417L);
        return this.listaEfecto;
    }

    public void setListaEfecto(List<ParametroDto> listaEfecto) {
        this.listaEfecto = listaEfecto;
    }

    public String getTelComunicacion() {
        return telComunicacion;
    }

    public void setTelComunicacion(String telComunicacion) {
        this.telComunicacion = telComunicacion;
    }

    public boolean isMostrarFrmAccion() {
        return mostrarFrmAccion;
    }

    public void setMostrarFrmAccion(boolean mostrarFrmAccion) {
        this.mostrarFrmAccion = mostrarFrmAccion;
    }

    public ComunicacionDto getDtoComunica() {
        return dtoComunica;
    }

    public void setDtoComunica(ComunicacionDto dtoComunica) {
        this.dtoComunica = dtoComunica;
    }

    public List<PagoDto> getListaPagos() {
        return listaPagos;
    }

    public void setListaPagos(List<PagoDto> listaPagos) {
        this.listaPagos = listaPagos;
    }

    public EmpresaClienteManager getManager() {
        return manager;
    }

    public void setManager(EmpresaClienteManager manager) {
        this.manager = manager;
    }

    public EmpresaCobranzaManager getEmpCobranzaManager() {
        return empCobranzaManager;
    }

    public void setEmpCobranzaManager(EmpresaCobranzaManager empCobranzaManager) {
        this.empCobranzaManager = empCobranzaManager;
    }

    public ProductoEmpresaManager getProdEmpresaManager() {
        return prodEmpresaManager;
    }

    public void setProdEmpresaManager(ProductoEmpresaManager prodEmpresaManager) {
        this.prodEmpresaManager = prodEmpresaManager;
    }

    public DeudaClienteManager getDeudaClienteManager() {
        return deudaClienteManager;
    }

    public void setDeudaClienteManager(DeudaClienteManager deudaClienteManager) {
        this.deudaClienteManager = deudaClienteManager;
    }

    public ComunicacionManager getComunicacionManager() {
        return comunicacionManager;
    }

    public void setComunicacionManager(ComunicacionManager comunicacionManager) {
        this.comunicacionManager = comunicacionManager;
    }

    public ClienteManager getClienteManager() {
        return clienteManager;
    }

    public void setClienteManager(ClienteManager clienteManager) {
        this.clienteManager = clienteManager;
    }

    public ComunicacionDto getComunicacionDto() {
        return comunicacionDto;
    }

    public void setComunicacionDto(ComunicacionDto comunicacionDto) {
        this.comunicacionDto = comunicacionDto;
    }

    public List<ComunicacionDto> getListaComunicacion() {
        return listaComunicacion;
    }

    public void setListaComunicacion(List<ComunicacionDto> listaComunicacion) {
        this.listaComunicacion = listaComunicacion;
    }

    public Integer getRowKey() {
        return rowKey;
    }

    public void setRowKey(Integer rowKey) {
        this.rowKey = rowKey;
    }

    public UIData getGestionCobranzaDatatable() {
        return gestionCobranzaDatatable;
    }

    public void setGestionCobranzaDatatable(UIData gestionCobranzaDatatable) {
        this.gestionCobranzaDatatable = gestionCobranzaDatatable;
    }

    public PagoManager getPagoManager() {
        return pagoManager;
    }

    public void setPagoManager(PagoManager pagoManager) {
        this.pagoManager = pagoManager;
    }
 
}
